package fr.upmc.alasca.centreCalcul.interne.machinePhysique.coeur.interfaces;

import fr.upmc.alasca.centreCalcul.objets.EtatCoeur;
import fr.upmc.components.interfaces.OfferedI;
import fr.upmc.components.interfaces.RequiredI;


public	interface	CoeurOperateurI
extends				OfferedI, RequiredI
{
	/**
	 * @return L'état du coeur
	 * @throws Exception
	 */
	public	EtatCoeur	getEtat
	() throws	Exception;
	
	
	/**
	 * @return L'uri de l'application qui utilise le coeur
	 * @throws Exception
	 */
	public	String		getUriApplication
	() throws	Exception;
	
	
	/**
	 * @return La fréquence courante du coeur
	 * @throws Exception
	 */
	public	float		getFrequence
	() throws	Exception;
	
	
	/**
	 * @return Si le coeur a une réservation pour un changement de fréquence
	 * @throws Exception
	 */
	public	boolean		aReservationFrequenceEnCours
	() throws Exception;
	
	
	/**
	 * @return La fréquence réservée
	 * @throws Exception
	 */
	public	float		getFrequenceReservee
	() throws	Exception;
	
	
	/**
	 * Réserve un coeur à une application.
	 * @param p_uriApplication L'identifiant de l'application
	 * @throws Exception
	 */
	public	void		reserverCoeur
	(
		String	p_uriApplication
	) throws	Exception;
	
	
	/**
	 * Permet de lier un coeur à une machine virtuelle.
	 * @param p_uriMachineVirtuelle L'uri de la machine virtuelle
	 * @throws Exception
	 */
	public	void		allouerCoeur
	(
		String	p_uriMachineVirtuelle
	) throws	Exception;
	
	
	/**
	 * Permet de retirer un coeur d'une machine virtuelle.
	 * @throws Exception
	 */
	public	void		desallouerCoeur
	() throws	Exception;
	
	
	/**
	 * Réserver une nouvelle fréquence d'utilisation du coeur.
	 * @param p_frequence La nouvelle fréquence
	 * @return La fréquence réellement assignée
	 * @throws Exception
	 */
	public  float		reserverFrequence
	(
		float	p_frequence
	) throws	Exception;
	
	
	/**
	 * Permet de valider le changement de fréquence du coeur.
	 * @throws Exception
	 */
	public	void		changerFrequence
	() throws	Exception;
	
	
	/**
	 * Permet d'annuler la réservation d'un changement de fréquence du coeur.
	 * @throws Exception
	 */
	public	void		dereserverCoeur
	() throws	Exception;

}
